#!/usr/bin/env python3
"""
检查identifier.sqlite数据库文件的脚本
用于验证数据库文件是否存在并包含有效内容
"""
import os
import sqlite3
import sys

def check_identifier_db():
    """检查identifier.sqlite数据库文件"""
    print("检查identifier.sqlite数据库文件...")
    
    # 数据库文件路径
    db_path = os.path.join(os.getcwd(), 'identifier.sqlite')
    
    # 检查文件是否存在
    if not os.path.exists(db_path):
        print(f"错误: 数据库文件 {db_path} 不存在！")
        return False
    
    print(f"数据库文件存在: {db_path}")
    print(f"文件大小: {os.path.getsize(db_path)/1024:.2f} KB")
    
    # 尝试连接数据库
    try:
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        print("✓ 成功连接到数据库")
        
        # 列出所有表
        print("\n数据库中的表:")
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
        tables = cursor.fetchall()
        
        if not tables:
            print("  未找到表")
        else:
            for table in tables:
                table_name = table[0]
                print(f"  - {table_name}")
                
                # 获取每个表的列信息
                cursor.execute(f"PRAGMA table_info({table_name});")
                columns = cursor.fetchall()
                print(f"    列: {', '.join([col[1] for col in columns])}")
                
                # 尝试获取前几条记录
                try:
                    cursor.execute(f"SELECT * FROM {table_name} LIMIT 3;")
                    rows = cursor.fetchall()
                    print(f"    记录数: {len(rows)} (显示前3条)")
                    if rows:
                        print("    数据示例:")
                        for i, row in enumerate(rows[:2]):  # 只显示前2条
                            print(f"      第{i+1}行: {row[:3]}...")  # 只显示前3个字段
                except Exception as e:
                    print(f"    无法读取数据: {e}")
        
        # JDBC连接字符串建议
        print("\nJDBC连接字符串:")
        print(f"  jdbc:sqlite:{db_path}")
        print("  或者相对路径:")
        print(f"  jdbc:sqlite:identifier.sqlite")
        
        return True
        
    except sqlite3.Error as e:
        print(f"✗ 数据库连接错误: {e}")
        return False
    finally:
        if 'conn' in locals():
            conn.close()

def compare_with_main_db():
    """比较identifier.sqlite与主数据库flowscape.db"""
    print("\n" + "=" * 60)
    print("比较identifier.sqlite与主数据库")
    print("=" * 60)
    
    # 检查主数据库
    main_db_path = os.path.join(os.getcwd(), 'flowscape.db')
    if os.path.exists(main_db_path):
        print(f"主数据库存在: flowscape.db ({os.path.getsize(main_db_path)/1024:.2f} KB)")
        print("注意: 项目主要使用flowscape.db数据库，不是identifier.sqlite")
    else:
        print("主数据库 flowscape.db 不存在")

def main():
    """主函数"""
    print("=" * 60)
    print("数据库文件检查工具")
    print("=" * 60)
    
    # 检查identifier.sqlite
    check_identifier_db()
    
    # 比较主数据库
    compare_with_main_db()
    
    print("\n" + "=" * 60)
    print("检查完成！")
    print("=" * 60)

if __name__ == "__main__":
    main()